Over-posting in ASP.NET Core application A security vulnerability

ASP.NET Core वेबएप्लिकेशन में ओवर-पोस्टिंग (Overposting)

ओवर-पोस्टिंग (Overposting) एक सिक्योरिटी वल्नरेबिलिटी (security vulnerability) है, जो तब होती है जब क्लाइंट से आने वाले डेटा में अप्रत्याशित या अनचाही प्रॉपर्टीज़ भी बाइंड हो जाती हैं और उन्हें सर्वर पर अपडेट या सेव कर दिया जाता है।

थोड़ा आसान भाषा में समझें — ओवर-पोस्टिंग का मतलब है:

यूज़र को जो डेटा अपडेट करने की अनुमति होनी चाहिए, उससे ज़्यादा डेटा सर्वर पर अपडेट हो जाना।"

एक उदाहरण से समझें (Without Protection)

मान लीजिए आपके पास एक मॉडल है:

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
    public bool IsAdmin { get; set; } // Should only be modified by admins
}

अब यदि आप कोई ऐसा कोड लिखते हैं:

[HttpPost]
public IActionResult Edit(User user)
{
    _dbContext.Users.Update(user);
    _dbContext.SaveChanges();
    return RedirectToAction("Index");
}

अगर कोई user ऐसा फॉर्म सबमिट कर दे:

POST /user/edit
Content-Type: application/x-www-form-urlencoded
Id=1&Username=abc&Email=abc@example.com&IsAdmin=true

तो क्लाइंट ने IsAdmin=true भेज दिया — और क्योंकि आपने पूरे मॉडल को बाइंड किया है, IsAdmin प्रॉपर्टी भी अपडेट हो जाएगी! यह है ओवर-पोस्टिंग — एक आम यूज़र ने खुद को एडमिन बना लिया!

ओवर-पोस्टिंग कब-कब हो सकता है?

  • जब पूरे मॉडल को ऑटोमैटिकली बाइंड किया जाए ([FromForm], [FromBody], etc.)
  • जब ViewModel और Domain Model एक जैसे होते हैं (और separation नहीं होता)।
  • जब फॉर्म या JSON में कोई अतिरिक्त प्रॉपर्टी भेज दी जाए जो यूज़र को भेजनी नहीं चाहिए।
  • जब developer बिना सोचे-समझे Update() या Attach() जैसे मेथड्स यूज़ करता है।

ओवर-पोस्टिंग से बचने के उपाय

  • Bind attribute से बाइंडिंग सीमित करें:
  • public IActionResult Edit([Bind("Id, Username, Email")] User user)
        
  • ViewModel या DTO इस्तेमाल करें, जिसमें सिर्फ वही प्रॉपर्टी हो जो यूज़र से एक्सेप्ट करनी है।
  • Manually map करें:
  • var existingUser = _dbContext.Users.Find(userDto.Id);
    existingUser.Username = userDto.Username;
    existingUser.Email = userDto.Email;
        
  • Model Validation और Authorization filters लगाएँ।

निष्कर्ष (Summary)

ओवर-पोस्टिंग एक ऐसा दृश्य है जहाँ यूज़र "पर्दे के पीछे" से एक्स्ट्रा स्क्रिप्ट भेजकर डायरेक्टर की कुर्सी हथियाने की कोशिश करता है। ASP.NET Core का Model Binding सिस्टम बड़ा ताकतवर है, लेकिन "जिसे जितनी जिम्मेदारी मिले, उतनी ही शक्ति दी जानी चाहिए" — इस सिद्धांत पर चलें, और ओवर-पोस्टिंग से बचें।

@2025 Shribodh
Next:

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks